#ifndef SceneManager_h__
#define SceneManager_h__

#include "SceneTypes.h"

class CScene;
class CSceneManager
{
public:
	CSceneManager();
	~CSceneManager();

	void      ActivateScene(SceneID sceneID);
	void      DeactivateScene(SceneID sceneID);
	bool      IsSceneActive(SceneID sceneID);

	void      Update(float fTime);
	void      Render();

	// Retrieve scene by scene id, NULL if not found
	CScene*   GetSceneByID(SceneID sceneID);
	// Create a empty scene
	CScene*   CreateScene(const std::string& strSceneName);
	CScene*   LoadScene(const std::string& filepath);
	
	void      DestroyScene(CScene* pScene);
	void      DestroyScene(SceneID sceneID);

private:
	SceneID  _GenerateSceneID();

private:
	SceneID                     m_SceneIDSeed;
	std::map<SceneID, CScene*>  m_SceneMap;
	std::set<SceneID>           m_ActiveScenes;
};
#endif // SceneManager_h__
